//
//  WBBaseViewController.swift
//  传智微博
//
//  Created by 郑亚伟 on 16/11/3.
//  Copyright © 2016年 郑亚伟. All rights reserved.
//

import UIKit

//利用extension可以吧函数按照功能分类管理，便于阅读和维护
//注意：
//1.extension中不能有属性
//2.extension中不能重写父类的方法！重写是子类的职责，扩展是对类的扩展

///OC中不支持多继承，但是可以使用协议替代
//swift的遵守协议的写法更类似于多继承
//class WBBaseViewController: UIViewController,UITableViewDataSource,UITableViewDelegate{
///所有主控制器的基类控制器
class WBBaseViewController: UIViewController{
    ///如果用户没有登录，就不创建，因此需要用？，而且不能用懒加载
    var tableView:UITableView?
    ///自定义导航条
    public lazy var myNavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))
    //自定义导航项 外部设置导航栏内容，统一使用navItem
    public lazy var navItem = UINavigationItem()
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
        loadData()
    }
    
    ///重写title的didSet方法
    override var title: String?{
        didSet{
            navItem.title = title
        }
    }
    ///加载数据  --具体的实现由子类负责
    func loadData(){
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
}


//MARK:----------------设置界面--------------------
extension WBBaseViewController{
    ///子类重写写在entension中，父类的方法也要写在extension中，否则会有问题
    //为什么这里不能添加private
    func setupUI(){
        view.backgroundColor = UIColor.cz_random()
        //取消自动缩进 如果隐藏了导航栏，会自动缩进20个点
        automaticallyAdjustsScrollViewInsets = false
        setupNavigationBar()
        setupTableView()
    }
    
    ///设置表格视图
    private func setupTableView(){
        tableView = UITableView(frame: view.bounds, style: .plain)
        //注意，如果写成view.addSubView(tableView!),可能自定义的navigationBar会遮住部分tableView， 所以用insertSubView方法
        view.insertSubview(tableView!, belowSubview: myNavigationBar)
        //设置数据源和代理 Swift中不遵守协议，直接报错
        tableView?.dataSource = self
        tableView?.delegate = self
        
        //设置内容缩进
        //OC中是 UIEdgeInsetsMake(<#T##top: CGFloat##CGFloat#>, <#T##left: CGFloat##CGFloat#>, <#T##bottom: CGFloat##CGFloat#>, <#T##right: CGFloat##CGFloat#>),Swift中没有make
       //OC中：myNavigationBar.bounds.size.heighth   swift中：myNavigationBar.bounds.height
        /************************************************************/
        tableView?.contentInset = UIEdgeInsets(top: myNavigationBar.bounds.height, left: 0, bottom: tabBarController?.tabBar.bounds.height ?? 49, right: 0)
    }
    
    ///设置导航条
    private func setupNavigationBar(){
        view.addSubview(myNavigationBar)
        myNavigationBar.items = [navItem]//数组
        //设置navBar的渲染颜色
        myNavigationBar.barTintColor = UIColor.cz_color(withHex: 0xF6F6F6)
        //设置导航条的title字体颜色
        myNavigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.darkGray]
    }
}

//MARK: ----------UITableViewDelegate, UITableViewDataSource----------
extension WBBaseViewController:UITableViewDelegate,UITableViewDataSource{
     //这里要实现代理方法，不实现的话，就会直接报错Type 'WBBaseViewController' does not conform to protocol 'UITableViewDataSource'
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    //基类知识准备方法，子类负责具体的实现
    //子类的数据源不需要super
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
}

